#include <iostream>
using namespace std;

int n,a[1005];
struct Node{
    int d;
    struct Node *l,*r;
    Node(int d):d(d),l(NULL),r(NULL){}
};

void insert(Node *&root,int d){
    if(!root){
        root = new Node(d);
        return;
    }
    if(d<root->d)
        insert(root->l,d);
    else
        insert(root->r,d);
}

void insertM(Node *&root,int d){
    if(!root){
        root = new Node(d);
        return;
    }
    if(d>=root->d)
        insertM(root->l,d);
    else
        insertM(root->r,d);
}

int cnt = 0,flag = 1;
void preOrder(Node *root){
    if(root){
        if(root->d!=a[cnt++])    flag = 0;
        preOrder(root->l);
        preOrder(root->r);
    }
}

int space = 0;
void postOrder(Node *root){
    if(root){
        postOrder(root->l);
        postOrder(root->r);
        if(space)    cout<<" ";
        cout<<root->d;
        space = 1;
    }
}

signed main()
{
    cin>>n;
    for(int i=0;i<n;i++)    cin>>a[i];
    Node *root = NULL;
    if(a[0]>a[1])
        for(int i=0;i<n;i++)    insert(root,a[i]);
    else
        for(int i=0;i<n;i++)    insertM(root,a[i]);
    preOrder(root);
    if(flag){
        cout<<"YES\n";
        postOrder(root);
    }
    else    cout<<"NO\n";
    return 0;
}
